#pragma once

#ifndef __MATH_TYPES_H__
#define __MATH_TYPES_H__

#include <stdlib.h>
#include <stdio.h>

typedef char				Int8;
typedef short				Int16;
typedef long				Int32;
typedef __int64				Int64;

typedef unsigned char		Byte, Uint8;
typedef unsigned short		Word, Uint16;
typedef unsigned long		Dword, Uint32;
typedef unsigned __int64	Qword, Uint64;
typedef unsigned int		Uint;

typedef float				Float;

namespace math
{	
	template <class T> struct _Vector3;
	template <class T> struct _Matrix4x4;
	template <class T> struct _Quaternion;
	template <class T> class _MatrixMN;
	template <class T> class _VectorN;
	template <class T> struct _Line;
	template <class T> struct _Point2;

	struct Color32;
	struct ColorF;

	typedef _Vector3<Float> Vector3;
	typedef _Matrix4x4<Float> Matrix4x4;
	typedef _Quaternion<Float> Quaternion;
	typedef _MatrixMN<Float> MatrixMN;
	typedef _VectorN<Float> VectorN;
	typedef _Line<Float> Line;
	typedef _Point2<Float> Point2F;
}

#ifndef NULL
#define	NULL (void*)0
#endif

#endif // __MATH_TYPES_H__